home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / a_utils / perl / perl5a1.lha / perl5alpha1 / do / vecset < prev    next >
Encoding:
Text File  |  1992-08-15  |  886 b   |  41 lines

  1. void
  2. do_vecset(mstr,TARG)
  3. STR *mstr;
  4. STR *TARG;
  5. {
  6.     struct lstring *lstr = (struct lstring*)TARG;
  7.     register int offset;
  8.     register int size;
  9.     register unsigned char *s = (unsigned char*)mstr->str_ptr;
  10.     register unsigned long lval = U_L(str_gnum(TARG));
  11.     int mask;
  12.  
  13.     mstr->str_rare = 0;
  14.     TARG->str_magic = Nullstr;
  15.     offset = lstr->lstr_offset;
  16.     size = lstr->lstr_len;
  17.     if (size < 8) {
  18.     mask = (1 << size) - 1;
  19.     size = offset & 7;
  20.     lval &= mask;
  21.     offset >>= 3;
  22.     s[offset] &= ~(mask << size);
  23.     s[offset] |= lval << size;
  24.     }
  25.     else {
  26.     if (size == 8)
  27.         s[offset] = lval & 255;
  28.     else if (size == 16) {
  29.         s[offset] = (lval >> 8) & 255;
  30.         s[offset+1] = lval & 255;
  31.     }
  32.     else if (size == 32) {
  33.         s[offset] = (lval >> 24) & 255;
  34.         s[offset+1] = (lval >> 16) & 255;
  35.         s[offset+2] = (lval >> 8) & 255;
  36.         s[offset+3] = lval & 255;
  37.     }
  38.     }
  39. }
  40.  
  41.